#pragma once
#include "EventLoop.h"

class EventLoop;
class LoopThread;
class LoopThreadPool
{
private:
    int _thread_count;                  // 线程池总线程数，由外部调用 SetThreadCount 设置，默认是 0（单线程）
    int _next_idx;                      // 当前轮询使用的下标，NextLoop() 轮转用，用于连接负载均衡
    EventLoop *_baseLoop;               // 主线程 EventLoop，只用于 Acceptor 接收连接，不处理 IO
    std::vector<LoopThread *> _threads; // 所有子线程（IO线程）的封装对象，每个线程持有一个 EventLoop
    std::vector<EventLoop *> _loops;    // 每个工作线程中的 EventLoop 指针，用于连接绑定与事件分发

public:
    LoopThreadPool(EventLoop *baseLoop);

    // 1. 设置线程数量
    void SetThreadCount(int count);

    // 2. 创建所有的从属线程
    void Create();

    // 3. 实现RR轮转，使连接负载均衡
    EventLoop *NextLoop();
};